package jp.yvn.game.shooting.element;

import jp.yvn.game.shooting.R;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.drawable.BitmapDrawable;

/**
 * タッチエリアオブジェクト
 * 
 * @author Yvn_pq
 */
public class TouchAreaEntity {

	/** 移動の速度はタッチエリア（円形）の中心点(mCenterX, mCenterY)から離れた距離で計算する */
	public int mMoveX = 0;

	public int mMoveY = 0;

	/** 移動をコントロールするタッチエリア、円形 */
	private BitmapDrawable mMoveTouchAreaImage;

	/** タッチエリアの半径 */
	private final int mMoveTouchAreaRadius = 100;

	/** 中心座標 */
	private int mCenterX = 0;
	private int mCenterY = 0;
	private int mTop = 0; // 描画用座標

	/** 移動コントロールのタッチエリアが押されているかどうか */
	public boolean mMovePressed = false;

	/** Context */
	private final Context mContext;

	/** タッチエリアの透明化設定 */
	Paint p = new Paint();

	/**
	 * コンストラクタ
	 * 
	 * @param context
	 */
	public TouchAreaEntity(Context context, int width, int height) {
		mContext = context;

		// 初期化
		setInit(width, height);
	}

	/**
	 * 初期座標設定します
	 * 
	 * @param width
	 *            Viewの幅
	 * @param height
	 *            Viewの高さ
	 */
	private final void setInit(int width, int height) {

		// 画像読み込み
		Resources res = mContext.getResources();
		mMoveTouchAreaImage = new BitmapDrawable(Bitmap.createScaledBitmap(BitmapFactory.decodeResource(res, R.drawable.move_touch_area), mMoveTouchAreaRadius * 2, mMoveTouchAreaRadius * 2, true));

		mMoveTouchAreaImage.setAlpha(100);
		// タッチエリアの座標設定します
		mCenterX = mMoveTouchAreaRadius;
		mCenterY = height - mMoveTouchAreaRadius;
		mTop = mCenterY - mMoveTouchAreaRadius;
		mMoveTouchAreaImage.setBounds(0, mTop, mMoveTouchAreaRadius * 2, height);
	}

	/**
	 * 描画します
	 * 
	 * @param c
	 */
	public void draw(Canvas c) {
		mMoveTouchAreaImage.draw(c);
		// c.drawBitmap(mMoveTouchAreaImage, 0, mTop, p);
	}

	/**
	 * 移動コントロールのタッチエリアにタッチされたかどうか
	 * 
	 * @param touchedX
	 * @param touchedY
	 * @return
	 */
	public boolean touched(float touchedX, float touchedY) {
		int areaBoundX = (int) (Math.cos(Math.atan2(mCenterY - touchedY, touchedX - mCenterX)) * mMoveTouchAreaRadius);
		if (areaBoundX < 0 && touchedX > mMoveTouchAreaRadius + areaBoundX) {
			mMovePressed = true;
			mMoveX = (int) touchedX - mCenterX;
			mMoveY = (int) touchedY - mCenterY;
		} else if (areaBoundX > 0 && touchedX < mMoveTouchAreaRadius + areaBoundX) {
			mMovePressed = true;
			mMoveX = (int) touchedX - mCenterX;
			mMoveY = (int) touchedY - mCenterY;
		} else {
			mMovePressed = false;
		}
		return mMovePressed;
	}

	public void reset() {
		mMovePressed = false;
		mMoveX = 0;
		mMoveY = 0;
	}
}
